package com.meatball.dronefly;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.widget.Toast;

import com.amap.api.maps.AMap;
import com.amap.api.maps.CoordinateConverter;
import com.amap.api.maps.MapView;
import com.amap.api.maps.MapsInitializer;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;

import java.util.Objects;

import dji.common.flightcontroller.FlightControllerState;
import dji.sdk.base.BaseProduct;
import dji.sdk.flightcontroller.FlightController;
import dji.sdk.products.Aircraft;
import dji.sdk.sdkmanager.DJISDKManager;

/**
 * 高德地图
 * @author 张翔宇
 * @since 2022年8月30日
 */
public class MapGaoDeActivity extends AppCompatActivity {
    /**
     * 高德地图控件对象
     */
    private MapView mapView;
    /**
     * 地图控制器AMap对象
     */
    private AMap aMap;
    /**
     * 无人机标记
     */
    private MarkerOptions markerOptions;

    // public MapGaoDeActivity() {
    //     MapsInitializer.updatePrivacyShow(MapGaoDeActivity.this, true, true);
    //     MapsInitializer.updatePrivacyAgree(MapGaoDeActivity.this, true);
    // }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map_gaode);
        // 获取高德地图控件对象
        mapView = findViewById(R.id.gao_de_map);
        mapView.onCreate(savedInstanceState);
        // 获取地图控制器AMap对象
        if (Objects.isNull(aMap)) {
            aMap = mapView.getMap();
        }
        // 初始化无人机标记
        // markerOptions = new MarkerOptions();
        // markerOptions.anchor(0.5f, 0.5f);
        // markerOptions.icon(BitmapDescriptorFactory.fromBitmap(
        //         BitmapFactory.decodeResource(getResources(),
        //                 R.mipmap.aircraft))
        // );
        // // 将Marker设置为贴地显示，可以双指下拉地图查看效果
        // // 设置平贴地图效果
        // markerOptions.setFlat(true);
        // 初始化监听器
        // initListener();
    }

    /**
     * 设置监听器
     */
    private void initListener() {
        FlightController controller = getFlightController();
        if (controller != null) {
            controller.setStateCallback(state -> {
                // 获取无人机的经度
                double longitude = state.getAircraftLocation().getLongitude();
                // 获取无人机的纬度
                double latitude = state.getAircraftLocation().getLatitude();
                // 获取无人机航向
                float yaw = (float) state.getAttitude().yaw;

                // 初始化坐标转换类
                CoordinateConverter converter = new CoordinateConverter(getApplicationContext());
                converter.from(CoordinateConverter.CoordType.GPS);
                // 设置需要转换的坐标
                converter.coord(new LatLng(latitude, longitude));
                // 转换成高德坐标
                LatLng latLng = converter.convert();

                // 设置无人机的位置和方向
                markerOptions.position(new LatLng(latLng.latitude, latLng.longitude));
                markerOptions.rotateAngle(-yaw);

                // 清除所有标记
                aMap.clear();
                // 添加无人机标记
                aMap.addMarker(markerOptions);
            });
        } else {
            showToast("飞行控制器获取失败，请检查飞行控制器连接是否正常。");
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 暂停地图绘制
        mapView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 重新绘制加载地图
        mapView.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 销毁地图
        mapView.onDestroy();
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        // 保存地图当前的状态
        mapView.onSaveInstanceState(outState);
    }

    /**
     * 获取无人机的飞行控制器
     * @return 飞行控制器
     */
    private FlightController getFlightController() {
        BaseProduct product = DJISDKManager.getInstance().getProduct();
        if (product != null && product.isConnected()) {
            if (product instanceof Aircraft) {
                return ((Aircraft) product).getFlightController();
            }
        }
        return null;
    }

    /**
     * 在主线程中提示
     * @param toastMsg 消息
     */
    private void showToast(final String toastMsg) {
        runOnUiThread(() -> Toast.makeText(getApplicationContext(), toastMsg, Toast.LENGTH_SHORT).show());
    }
}